package lzzy.edu.cn.demothymeleaf.controller;

import lzzy.edu.cn.demothymeleaf.entity.Article; // 导入 Article 实体类
import lzzy.edu.cn.demothymeleaf.entity.Customer; // 导入 Customer 实体类
import lzzy.edu.cn.demothymeleaf.repository.ArticleRepository; // 导入 ArticleRepository 接口
import lzzy.edu.cn.demothymeleaf.service.ArticleService; // 导入 ArticleService 服务类
import lzzy.edu.cn.demothymeleaf.service.CommentService; // 导入 CommentService 服务类
import lzzy.edu.cn.demothymeleaf.service.UserService; // 导入 UserService 服务类
import org.springframework.beans.factory.annotation.Autowired; // 导入自动注入注解
import org.springframework.data.domain.Page; // 导入分页相关类
import org.springframework.security.core.Authentication; // 导入认证相关类
import org.springframework.security.core.context.SecurityContext; // 导入安全上下文类
import org.springframework.security.core.context.SecurityContextHolder; // 导入安全上下文持有者
import org.springframework.security.core.userdetails.UserDetails; // 导入用户详细信息类
import org.springframework.stereotype.Controller; // 导入控制器注解
import org.springframework.ui.Model; // 导入模型类，用于传递数据
import org.springframework.web.bind.annotation.*; // 导入请求映射相关注解

import java.util.List; // 导入列表类

@Controller // 声明该类为控制器
public class ArticleController {

    @Autowired // 自动注入 ArticleService 实例
    private ArticleService articleService;

    @Autowired // 自动注入 UserService 实例
    private UserService userService;

    @Autowired // 自动注入 ArticleRepository 实例
    private ArticleRepository articleRepository;

    // 获取所有文章并重定向到第一页
    @GetMapping("/article/all")
    public String all(Model model) {
        List<Article> articles = articleService.findAll(); // 查找所有文章
        model.addAttribute("articles", articles); // 将文章列表添加到模型中
        return "redirect:/article/1"; // 重定向到第一页
    }

    // 显示添加文章的页面
    @GetMapping("/article/add")
    public String add() {
        return "add"; // 返回添加文章视图
    }

    // 处理添加文章的请求
    @PostMapping("/article/add")
    public String addArticle(@RequestParam("title") String title, @RequestParam("content") String content) {
        articleService.addArticle(title, content); // 调用服务添加文章
        return "redirect:/article/1"; // 重定向到第一页
    }

    // 显示更新文章的页面
    @GetMapping("/article/update/{id}")
    public String update(Model model, @PathVariable("id") Integer id) {
        Article article = articleService.findById(id); // 查找指定ID的文章
        model.addAttribute("article", article); // 将文章添加到模型中
        return "update"; // 返回更新文章视图
    }

    // 处理更新文章的请求
    @PostMapping("/article/update/{id}")
    public String updateArticle(@PathVariable("id") Integer id, @RequestParam("title") String title,
                                @RequestParam("content") String content) {
        articleService.updateArticle(id, title, content); // 调用服务更新文章
        return "redirect:/article/1"; // 重定向到第一页
    }

    // 处理删除文章的请求
    @GetMapping("/article/delete/{id}")
    public String delete(@PathVariable("id") Integer id) {
        articleService.deleteArticleById(id); // 调用服务删除文章
        return "redirect:/article/1"; // 重定向到第一页
    }

    // 显示分页的文章列表
    @GetMapping("/article/{page}")
    public String page(Model model, @PathVariable("page") int page) {
        Page<Article> articlePage = articleService.findAllByPage(page - 1, 2); // 获取指定页的文章
        int totalPages = articlePage.getTotalPages(); // 获取总页数
        List<Article> articles = articlePage.getContent(); // 获取当前页的文章内容
        model.addAttribute("articles", articles); // 将文章列表添加到模型中
        model.addAttribute("totalPages", totalPages); // 将总页数添加到模型中
        model.addAttribute("page", page); // 将当前页码添加到模型中
        return "article"; // 返回文章视图
    }

    // 显示个人资料修改页面
    @GetMapping("/user")
    public String person() {
        return "person"; // 返回个人资料视图
    }

    // 处理个人资料更新的请求
    @PostMapping("/updateperson/{id}")
    public String updateperson(@PathVariable Integer id, @RequestParam String email, Model model,String phone,String username,String qq) {
        Customer customer = userService.findCustomerById(id); // 查找指定ID的用户
        customer.setUsername(username);
        customer.setPhone(phone);
        customer.setEmail(email); // 更新用户的邮箱
        customer.setQq(qq);
        userService.saveCustomer(customer); // 保存用户信息
        model.addAttribute("user", customer); // 将用户信息添加到模型中
        return "redirect:/getuser"; // 重定向到获取用户信息页面
    }

    // 获取当前用户的信息
    @GetMapping("/getuser")
    public String getPerson(Model model) {
        SecurityContext context = SecurityContextHolder.getContext(); // 获取安全上下文
        Authentication authentication = context.getAuthentication(); // 获取认证信息
        UserDetails principal = (UserDetails) authentication.getPrincipal(); // 获取用户详细信息
        System.out.println(principal.getUsername()); // 打印当前用户名
        model.addAttribute("user", userService.findCustomerByUsername(principal.getUsername())); // 将用户信息添加到模型中
        return "person"; // 返回个人资料视图
    }

    // 显示首页
    @GetMapping("/index")
    public String index() {
        return "index"; // 返回首页视图
    }

    // 处理用户注册请求
    @PostMapping("/register")
    public String register(@RequestBody Customer customer) {
        userService.register(customer); // 调用服务注册用户
        return "User registered successfully"; // 返回成功信息
    }

    // 搜索功能
    @GetMapping("/search")
    public String search(
            @RequestParam(value = "query", required = false, defaultValue = "") String query,
            Model model) {

        // 根据标题或内容查找包含搜索关键字的文章
        List<Article> articles = articleRepository.findByTitleOrContentContainingIgnoreCase(query);
        model.addAttribute("articles", articles); // 将搜索结果添加到模型中
        model.addAttribute("query", query); // 将查询关键字添加到模型中
        return "searchResult"; // 返回搜索结果视图
    }


}
